/*
 * Copyright 2008 Zoundry LLC, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 */
package org.zoundry.gaedt.services.applications.starters;

import org.zoundry.gaedt.services.applications.IZGaeApplication;
import org.zoundry.gaedt.services.applications.IZGaeApplicationVisitor;
import org.zoundry.gaedt.services.applications.ZGaePythonApplication;

/**
 * Factory for creating starters.
 */
public class ZGaeApplicationStarterFactory
{
    /** The singleton instance. */
    private static final ZGaeApplicationStarterFactory sInstance = new ZGaeApplicationStarterFactory();

    /**
     * Singleton accessor.
     */
    public static final ZGaeApplicationStarterFactory getInstance()
    {
        return sInstance;
    }

    /**
     * Creates a starter for the given application.
     *
     * @param aApplication
     */
    public IZGaeApplicationStarter createStarter(IZGaeApplication aApplication)
    {
        ZGaeApplicationStarterFactoryVisitor visitor = new ZGaeApplicationStarterFactoryVisitor();
        aApplication.accept(visitor);
        return visitor.getStarter();
    }
    
    /**
     * Simple visitor for creating the starters.
     */
    private static class ZGaeApplicationStarterFactoryVisitor implements IZGaeApplicationVisitor
    {
        private IZGaeApplicationStarter mStarter;

        /**
         * @see org.zoundry.gaedt.services.applications.IZGaeApplicationVisitor#visit(org.zoundry.gaedt.services.applications.ZGaePythonApplication)
         */
        public void visit(ZGaePythonApplication aApplication)
        {
            setStarter(new ZGaePythonApplicationStarter(aApplication));
        }

        /**
         * @return the starter
         */
        protected IZGaeApplicationStarter getStarter()
        {
            return mStarter;
        }

        /**
         * @param aStarter the starter to set
         */
        protected void setStarter(IZGaeApplicationStarter aStarter)
        {
            mStarter = aStarter;
        }
    }
}
